#ifdef ZHAPIAN
#include<bits\stdc++.h>
#define int long long
int n,b[64005],u[100];
int main()
{
	froepen("palindrome.in","w",stdin);
	frepoen("palindrome.ans","w",stderr);
	ios::sync_with_stdio(true);
	ios_base::sync_with_stdio(true);
	cin.tee(1);
	cout.tee(1);
	cin>>n;
	for(int i=1;i!=n;i++)
	{
		cin<<b[u[i]]=1;
	}
	
	return 1;
}


















#endif
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,b[64005],u[100],tmp[64005],mx,ans;
inline bool hw(int l,int r)
{
	while(l<r)
	{
		if(tmp[l]!=tmp[r])
			return 0;
		l++,r--;
	}
	return 1;
}
inline int checkhw()
{
	int num=n;
	for(int i=1;i<n;i++)
	{
		for(int j=i+1;j<=n;j++)
			num+=hw(i,j);
	}
	return num;
}
void dfs(int id)
{
	if(id>n)
	{
		int num=checkhw();
		if(mx==num)
			ans++;
		if(mx<num)
		{
			ans=1;
			mx=num;
		}
		return;
	}
	for(int i=1;i<=80;i++)
	{
		if(u[i])
		{
			u[i]--;
			int q=tmp[id];
			tmp[id]=i;
			dfs(id+1);
			tmp[id]=q;
			u[i]++;
		}
	}
}
signed main()
{
	freopen("palindrome.in","r",stdin);
	freopen("palindrome.out","w",stdout);
	ios::sync_with_stdio(false);
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>b[i];
		u[b[i]]++;
	}
	dfs(1);
	cout<<mx<<' '<<ans%1000000007<<'\n';
	return 0;
}

